home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 008 / egademo.arc / MFRACT.C < prev    next >
Encoding:
C/C++ Source or Header  |  1986-03-12  |  2.5 KB  |  130 lines

  1. #include <graphics.h>
  2. #define SIZE 32   /* size of array */
  3. #define MSX 320   /* midscreen */
  4. #define XK 10 /* X scale */
  5.  
  6. int TILT,ZK;
  7. int map[SIZE+1][SIZE+1];
  8. int ms[641];
  9. double frand();
  10.  
  11. main(argc,argv)
  12. int argc;
  13. char *argv[];
  14. {
  15.     int i,j,sx,sy,sx1,sy1,min,max;
  16.     double f,w;
  17.     if (argc != 4) {
  18.     printf("syntax is: MFRACT tilt-factor z-scale seed-value\n");
  19.     printf("try: mfract 2 3 1027\n");
  20.     exit(0);
  21.     }
  22.    printf("working ...");
  23.     for (i=0;i<641;i++) ms[i]=199;
  24.     TILT=atoi(argv[1]);
  25.     ZK=atoi(argv[2]);
  26.     srand(atoi(argv[3]));
  27.  
  28.     sfract(0,0,SIZE);
  29.  
  30.     min=32766;
  31.     max=-32766;
  32.     for (i=0;i<=SIZE;i++)
  33.      for (j=0;j<=SIZE;j++) {
  34.      sy=(map[i][j]=(TILT*(i+j)+ZK*map[i][j]));
  35.      if (sy<min) min=sy;
  36.      if (sy>max) max=sy;
  37.      }
  38.  
  39.     f = 199.0/(double)(max-min);
  40.     for (i=0;i<=SIZE;i++)
  41.      for (j=0;j<=SIZE;j++) map[i][j]=199-(int)(f*(map[i][j]-min));
  42.  
  43.     scr_setup();
  44.     scr_setmode( 6 );
  45.     scr_clr();
  46.     set_video_mode(0x10);
  47.     set_color(7);
  48.     int page;
  49.     page = 1;
  50.     show_buffer(page);
  51.     set_write_buffer(page);
  52.     for (i=0;i<=SIZE;i++) {
  53.        for (j=0;j<=SIZE;j++) {
  54.        sx=MSX+XK*(i-j);
  55.        sy=map[i][j];
  56.        if (j < SIZE) {
  57.           sy1=map[i][j+1];
  58.           sx1=sx-XK;
  59.           hline(sx,sy,sx1,sy1);
  60.           }
  61.        if (i < SIZE ) {
  62.           sx1=sx+XK;
  63.           sy1=map[i+1][j];
  64.           hline(sx,sy,sx1,sy1);
  65.           }
  66.        }
  67.        }
  68.    while ( 0 == scr_csts()) ;
  69.    scr_setmode( 2 );
  70.    scr_clr();
  71.    exit(0);
  72. }
  73.  
  74. hline(x,y,x1,y1)
  75. int x,y,x1,y1;
  76. {
  77.    int dx,dy,hx,hy,hx0,hy0,hx1,hy1,hi;
  78.    double hz;
  79.  
  80.    if (x <= x1) {
  81.       dx = x1-x ;
  82.       dy = y1-y ;
  83.       hx0= x;
  84.       hy0= y;
  85.  
  86.       }
  87.       else {
  88.      dx = x-x1 ;
  89.      dy = y-y1 ;
  90.      hx0 = x1;
  91.      hy0 = y1;
  92.       }
  93.    hz = (double)dy/(double)dx;
  94.    for (hi=0; hi < dx; hi++) {
  95.        hx = hx0+hi;
  96.        hy = hy0+hz*hi;
  97.        if (ms[hx]>=hy) { ms[hx]=hy; c_write_dot(hx,hy) ; }
  98.        }
  99.    }
  100.  
  101. sfract(x,y,d)
  102.  int x,y,d;
  103.  {
  104.  int d2,xc,yc,xd,yd,lfract();
  105.  
  106.  xd=x+d;
  107.  yd=y+d;
  108.  d2=d>>1;
  109.  xc=x+d2;
  110.  yc=y+d2;
  111.  map[x][yc] = lfract(x,y,x,yd,d);
  112.  map[xc][y] = lfract(x,y,xd,y,d);
  113.  map[xd][yc] = lfract(xd,y,xd,yd,d);
  114.  map[xc][yd] = lfract(x,yd,xd,yd,d);
  115.  map[xc][yc] = (lfract(x,yc,xd,yc,d) + lfract(xc,y,xc,yd,d))/2 ;
  116.  
  117.  if (d2 > 1) {
  118.   sfract(x,y,d2);
  119.   sfract(xc,y,d2);
  120.   sfract(x,yc,d2);
  121.   sfract(xc,yc,d2);
  122.  }
  123. }
  124.  
  125. int lfract(x1,y1,x2,y2,d3)
  126.  int x1,y1,x2,y2,d3;
  127.  {
  128.  return(((map[x1][y1]+map[x2][y2])/2)+d3*(frand()-.5));
  129.  }
  130.